﻿/*
给定一个整数数组 A，如果它是有效的山脉数组就返回 true，否则返回 false。
让我们回顾一下，如果 A 满足下述条件，那么它是一个山脉数组：

A.length >= 3
在 0 < i < A.length - 1 条件下，存在 i 使得：
A[0] < A[1] < ... A[i-1] < A[i]
A[i] > A[i+1] > ... > A[A.length - 1]
 
示例 1：
输入：[2,1]
输出：false

示例 2：
输入：[3,5,5]
输出：false

示例 3：
输入：[0,3,2,1]
输出：true
 

提示：
0 <= A.length <= 10000
0 <= A[i] <= 10000 

*/

#include "AllInc.h"

class Solution {
public:
	bool validMountainArray(vector<int>& A) 
	{
		char flag = 0;
		for (size_t i = 1; i < A.size(); i++)
		{
			if (A[i] == A[i - 1])
			{
				return false;
			}

			if (flag == 0)
			{
				if (A[i] > A[i - 1])
				{
					flag = 1;
				}
				else
				{
					return false;
				}
			}
			else if (flag > 0)
			{
				if (A[i] < A[i - 1])
				{
					flag = -1;
				}
			}
			else
			{
				if (A[i] > A[i - 1])
				{
					return false;
				}
			}
		}

		return flag == -1;

		/*int n = A.size();
		int i = 0;
		int j = n - 1;
		while (i < n - 1 && A[i] < A[i + 1])
		{
			i++;
		}
		while (j > 0 && A[j] < A[j - 1])
		{
			j--;
		}
		return i > 0 && j < n - 1 && i == j;*/
	}
};

//int main()
//{
//	Solution s;
//	vector<int> data{ 2,1 };
//	auto result = s.validMountainArray(data);
//
//	return 0;
//}